<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8"/>
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
	<meta name="description" content=""/>
	<meta name="author" content=""/>
	<link rel="icon" href="${pageContext.request.contextPath}/static/images/favicon.ico"/>
	<title>二维码</title>
	<!-- Bootstrap core CSS -->
	<link href="${pageContext.request.contextPath}/static/dist/css/bootstrap.min.css" type="text/css" rel="stylesheet"/>
	<link href="${pageContext.request.contextPath}/static/dist/css/bootstrap-grid.css" type="text/css" rel="stylesheet"/>
	<link href="${pageContext.request.contextPath}/static/dist/css/bootstrap-reboot.css" type="text/css" rel="stylesheet"/>
	<link href="${pageContext.request.contextPath}/static/dist/zaddcss/zaddindex.css" type="text/css" rel="stylesheet"/>
	<style type="text/css">
		input[name='deviceCode']{
			width:90%;
			border-top:none;
			border-left:none;
			border-right:none;
			border-bottom:solid rgb(227, 227, 227);
		}
	</style>
</head>
<body>
<nav class="navbar navbar-dark bg-dark">
	<a class="navbar-brand" href="#">Never expand</a>
	<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
	<a class="nav-link" href="#">Link</a>
	<a class="nav-link disabled" href="#">Disabled</a>
	<a class="nav-link dropdown-toggle" href="https://example.com" id="dropdown06" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
	<div class="dropdown-menu" aria-labelledby="dropdown06">
		<a class="dropdown-item" href="#">Action</a>
		<a class="dropdown-item" href="#">Another action</a>
		<a class="dropdown-item" href="#">Something else here</a>
	</div>
	<form class="form-inline my-2 my-md-0" action="#">
		<label>
			<input class="form-control" type="text" placeholder="Search"/>
		</label>
	</form>
	<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExample01" aria-controls="navbarsExample01" aria-expanded="false" aria-label="Toggle navigation">
		QA<span class="navbar-toggler-icon"></span>
	</button>
	<div class="collapse navbar-collapse" id="navbarsExample01">
		<p>1234567489123456798</p>
		<p>1234567489123456798</p>
		<p>1234567489123456798</p>
		<p>1234567489123456798</p>
	</div>
</nav>
<main role="main">
	<section class="jumbotron text-center">
		<div class="container">
			<h3 class="jumbotron-heading">二维码生成</h3>
		</div>
	</section>
	<div class="album py-6 bg-light">
		<div class="container">
			<%--是否勾选了兴邦专用--%>
			<div class="form-check form-check-inline">
				<input class="form-check-input" style="display:none;" id="hideinlineRadioOptions" type="radio" name="inlineRadioOptions" value="">
				<label class="form-check-label" for="hideinlineRadioOptions"></label>
			</div>
			<div class="form-check form-check-inline">
				<input class="form-check-input" type="radio" name="inlineRadioOptions" id="pkgStatus" value="option1">
				<label class="form-check-label" for="pkgStatus">状态包</label>
			</div>
			<div class="form-check form-check-inline">
				<input class="form-check-input" type="radio" name="inlineRadioOptions" id="pkgCrd" value="option2">
				<label class="form-check-label" for="pkgCrd">消费记录</label>
			</div>
                <div class="form-check form-check-inline">
                    <input class="form-check-input" type="radio" name="inlineRadioOptions" id="makeWater" value="option2">
                    <label class="form-check-label" for="makeWater">水控参数</label>
                </div>
			<%--是否勾选了兴邦专用 end--%>
			<%--输入设备码 start --%>
			<div class="form-check">
				<label for="deviceCode">设备码：</label>
				<input name="deviceCode" id="deviceCode" type="text" value="00000000000000000000000000004e7900004e7900000000000008080028e00200000070000121000100640101016400020064ffff0000000000000000ffff010a7f6be6" placeholder=""/>
				<%--输入备码 end --%>
                <%--00000000000000000000000000000007000000070000000000000202001F03080000000000000000000004D504190327162228000000010000B863--%>
				<p id="analysisContext">
				</p>
			</div>
		</div>
	</div>
</main>
<footer class="text-muted" style="margin-top: -10px">
	<div class="container">
		<p class="float-right">
			<a href="#">返回最上</a>
		</p>
		<p>示例页面 &copy; Bootstrap!</p>
		<p>
			<a href="https://github.com/zghnzch">访问我们的主页</a>
		</p>
	</div>
</footer>
<!-- region 引入js文件-->
<script src="${pageContext.request.contextPath}/static/jquery/3.3.1/jquery-3.3.1.min.js"></script>
<script src="${pageContext.request.contextPath}/static/bootstrap-4.2.1/site/docs/4.2/assets/js/vendor/bs-custom-file-input.min.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/js/bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/js/bootstrap.bundle.min.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/zaddjs/encrypt/src/core.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/zaddjs/encrypt/src/cipher-core.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/zaddjs/encrypt/src/tripledes.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/zaddjs/encrypt/src/mode-ecb.js"></script>
<script src="${pageContext.request.contextPath}/static/crypto-js-develop/src/myself-need.js"></script>
<script src="${pageContext.request.contextPath}/static/dist/zaddjs/copyContent/copyContent.js"></script>
<!-- endregion 引入js文件-->
<!-- region 元素定义--------------->
<script type="text/javascript">
	let inlineRadioOptions = $("input[name=inlineRadioOptions]");
	let pkgStatus = $("#pkgStatus");
	let pkgCrd = $("#pkgCrd");
	let makeWater = $("#makeWater");
	let analysisContext = $("#analysisContext");
	let deviceCode = $("#deviceCode");
	let hideinlineRadioOptions = $("#hideinlineRadioOptions");
</script>
<!-- endregion 元素定义--------------->
<%--$(function () {});--%>
<script type="text/javascript">
	$(function(){
		// 内容模式 是否要加密
		pkgStatus.on('change',function(event){
			if(checkInputDeviceCode()){
				setPkgStatus();
			}
			else{
				removeChecked();
			}
		});
		pkgCrd.on('change',function(event){
			if(checkInputDeviceCode()){
			}
			else{
				removeChecked();
			}
		});
        makeWater.on('change',function(event){
            if(checkInputDeviceCode()){
                shuikong();
            }
            else{
                removeChecked();
            }
        });

        deviceCode.on('input',function(e){
		});
	})
</script>
<script type="text/javascript">
	function checkInputDeviceCode(){
		let deviceCodeVal = deviceCode.val();
		if(null==deviceCodeVal || deviceCodeVal.length<=0){
			alert("请先填写设备码");
			return false;
		}
		else{
			return true;
		}
	}
	function removeChecked(){
		inlineRadioOptions.prop("checked",false);
	}
	function setPkgStatus(){
		// 00000000000000000000000000000007000000070000000000000202001F03080000000000000000000004D504190327162228000000010000B863
		// 00000000000000000000000000000007  32 静态ID（16字节高字节在前）
		// 00000007 40  设备机器号（4字节高字节在前）
		// 00000000 48  从设备机器号（4字节高字节在前；00000000表示主设备；非零表示中转设备）
		// 0000 52 协议类型（2字节高字节在前；0000表示主设备协议；非零表示中转设备协议）
		// 0202 56 设备类型（2字节高字节在前）
		// 001F 60  数据长度（2字节高字节在前）
		// 0308 64  0x03+0x08
		// 00000000 72 随机码（4字节高字节在前，可选）
		// 0000 76 未采集的记录总数（2字节高字节在前）
		// 0000 80 批次的最后名单（2字节高字节在前）
		// 000004D5 88 最后一个曾量挂失名单卡号（4字节高字节在前）
		// 04 90 系统状态信息（1字节；bit 0:黑名单是否已经发送完毕，0不完整； bit 1:终端是否有补助授权，1授权； bit 2: 1，有联机注册权，终端是否有联机注册授权）
		// 190327162228 102 年月日时分秒（6字节；压缩BCD码；例如年0x15表示2015年）（未用）
		// 0000 106 批次个数（2字节，高字节在前）
		// 0001 110 增量个数（2字节，高字节在前）
		// 0000 114 补助版本号（2字节，高字节在前）
		// B863 118 CRC校验（字节高字节在前）
		let deviceCodeVal = deviceCode.val();
		let deviceSn = deviceCodeVal.substring(0,32);
		//
		let deviceNum = deviceCodeVal.substring(32,40);
		//
		let subDeviceNum = deviceCodeVal.substring(40,48);
		//
		let protocolType = deviceCodeVal.substring(48,52);
		//
		let deviceType = deviceCodeVal.substring(52,56);
		//
		let length = deviceCodeVal.substring(56,60);
		//
		let mainFrame = deviceCodeVal.substring(60,64);
		//
		let randomCode = deviceCodeVal.substring(64,72);
		//
		let countCrd = deviceCodeVal.substring(72,76);
		//
		let lastBatchCard = deviceCodeVal.substring(76,80);
		//
		let lastBlackCard = deviceCodeVal.substring(80,88);
		// 系统状态信息（1字节；bit 0:黑名单是否已经发送完毕，0不完整； bit 1:终端是否有补助授权，1授权； bit 2: 1，有联机注册权，终端是否有联机注册授权）
		let deviceStatusInfo = deviceCodeVal.substring(88,90);
		//
		let deviceTime = deviceCodeVal.substring(90,102);
		//
		let countBatchBlack = deviceCodeVal.substring(102,106);
		//
		let countIncrementBlack = deviceCodeVal.substring(106,110);
		//
		let subversion = deviceCodeVal.substring(110,114);
		//
		let crc = deviceCodeVal.substring(114,118);
		analysisContext.append("<h6>原码:"+deviceCodeVal+"</h6>");
		analysisContext.append("<h6>序列号："+deviceSn+"  十进："+parseInt(deviceSn,16)+"</h6>");
		analysisContext.append("<h6>设备号："+deviceNum+"  十进："+parseInt(deviceNum,16)+"</h6>");
		analysisContext.append("<h6>从设备号："+subDeviceNum+"  十进："+parseInt(subDeviceNum,16)+"</h6>");
		analysisContext.append("<h6>协议类型："+protocolType+"  十进："+parseInt(protocolType,16)+"</h6>");
		analysisContext.append("<h6>设备类型："+deviceType+"  十进："+parseInt(deviceType,16)+"</h6>");
		analysisContext.append("<h6>数据长度："+length+"  十进："+parseInt(length,16)+"</h6>");
		analysisContext.append("<h6>关键帧："+mainFrame+"  十进："+parseInt(mainFrame,16)+"</h6>");
		analysisContext.append("<h6>随机码："+randomCode+"  十进："+parseInt(randomCode,16)+"</h6>");
		analysisContext.append("<h6>未采记录："+countCrd+"  十进："+parseInt(countCrd,16)+"</h6>");
		analysisContext.append("<h6>最后批次名单："+lastBatchCard+"  十进："+parseInt(lastBatchCard,16)+"</h6>");
		analysisContext.append("<h6>最后黑名单："+lastBlackCard+"  十进："+parseInt(lastBlackCard,16)+"</h6>");
		analysisContext.append("<h6>设备状态码："+deviceStatusInfo+"  十进："+parseInt(deviceStatusInfo,16)+"</h6>");
		analysisContext.append("<h6>设备时间："+deviceTime+"  十进："+parseInt(deviceTime,16)+"</h6>");
		analysisContext.append("<h6>批次名单个数："+countBatchBlack+"  十进："+parseInt(countBatchBlack,16)+"</h6>");
		analysisContext.append("<h6>黑名单个数："+countIncrementBlack+"  十进："+parseInt(countIncrementBlack,16)+"</h6>");
		analysisContext.append("<h6>补助版本："+subversion+"  十进："+parseInt(subversion,16)+"</h6>");
		analysisContext.append("<h6>校验："+crc+"  十进："+parseInt(crc,16)+"</h6>");
	}
	function shuikong(){
		// 00000000000000000000000000000007000000070000000000000202001F03080000000000000000000004D504190327162228000000010000B863
		// 00000000000000000000000000000007  32 静态ID（16字节高字节在前）
		// 00000007 40  设备机器号（4字节高字节在前）
		// 00000000 48  从设备机器号（4字节高字节在前；00000000表示主设备；非零表示中转设备）
		// 0000 52 协议类型（2字节高字节在前；0000表示主设备协议；非零表示中转设备协议）
		// 0202 56 设备类型（2字节高字节在前）
		// 001F 60  数据长度（2字节高字节在前）
		// 0308 64  0x03+0x08
		// 00000000 72 随机码（4字节高字节在前，可选）
		// 0000 76 未采集的记录总数（2字节高字节在前）
		// 0000 80 批次的最后名单（2字节高字节在前）
		// 000004D5 88 最后一个曾量挂失名单卡号（4字节高字节在前）
		// 04 90 系统状态信息（1字节；bit 0:黑名单是否已经发送完毕，0不完整； bit 1:终端是否有补助授权，1授权； bit 2: 1，有联机注册权，终端是否有联机注册授权）
		// 190327162228 102 年月日时分秒（6字节；压缩BCD码；例如年0x15表示2015年）（未用）
		// 0000 106 批次个数（2字节，高字节在前）
		// 0001 110 增量个数（2字节，高字节在前）
		// 0000 114 补助版本号（2字节，高字节在前）
		// B863 118 CRC校验（字节高字节在前）
		let deviceCodeVal = deviceCode.val();
		let deviceSn = deviceCodeVal.substring(0,32);
		//
		let deviceNum = deviceCodeVal.substring(32,40);
		//
		let subDeviceNum = deviceCodeVal.substring(40,48);
		//
		let protocolType = deviceCodeVal.substring(48,52);
		//
		let deviceType = deviceCodeVal.substring(52,56);
		//
		let length = deviceCodeVal.substring(56,60);
		//
		let mainFrame = deviceCodeVal.substring(60,64);
		//
		let randomCode = deviceCodeVal.substring(64,72);
		//
		let GoWaterType = deviceCodeVal.substring(72,74);
		//
		let StopWaterType = deviceCodeVal.substring(74,76);
		//
		let ConsumeType = deviceCodeVal.substring(76,78);
		// 系统状态信息（1字节；bit 0:黑名单是否已经发送完毕，0不完整； bit 1:终端是否有补助授权，1授权； bit 2: 1，有联机注册权，终端是否有联机注册授权）
		let Rate1Fare = deviceCodeVal.substring(78,82);
		//
		let Rate1Water = deviceCodeVal.substring(82,86);
		//
		let Rate5Fare = deviceCodeVal.substring(86,90);
		//
		let Rate5Water = deviceCodeVal.substring(90,94);
		//
		let WaterPrecision = deviceCodeVal.substring(94,98);
		let WaterLimit = deviceCodeVal.substring(98,102);
		let Rate1CardTypes = deviceCodeVal.substring(102,106);
		let DayLimitFare = deviceCodeVal.substring(106,110);
		let DayLimitFareCardTypes = deviceCodeVal.substring(110,114);
		//21  22
		let TimeLimitFare = deviceCodeVal.substring(114,118);
		//23  24
		let TimeLimitFareCardTypes = deviceCodeVal.substring(118,122);
		//25  26
		let CardMinFareCardTypes = deviceCodeVal.substring(122,126);
		//27
		let EnableAutoCalcRate = deviceCodeVal.substring(126,128);
		//28
		let CardMinFare = deviceCodeVal.substring(128,130);
		//29
		let Enable = deviceCodeVal.substring(130,132);
		//

		let crc = deviceCodeVal.substring(132,136);
		analysisContext.append("<h6>原码:"+deviceCodeVal+"</h6>");
		analysisContext.append("<h6>序列号："+deviceSn+"  十进："+parseInt(deviceSn,16)+"</h6>");
		analysisContext.append("<h6>设备号："+deviceNum+"  十进："+parseInt(deviceNum,16)+"</h6>");
		analysisContext.append("<h6>从设备号："+subDeviceNum+"  十进："+parseInt(subDeviceNum,16)+"</h6>");
		analysisContext.append("<h6>协议类型："+protocolType+"  十进："+parseInt(protocolType,16)+"</h6>");
		analysisContext.append("<h6>设备类型："+deviceType+"  十进："+parseInt(deviceType,16)+"</h6>");
		analysisContext.append("<h6>数据长度："+length+"  十进："+parseInt(length,16)+"</h6>");
		analysisContext.append("<h6>关键帧："+mainFrame+"  十进："+parseInt(mainFrame,16)+"</h6>");
		analysisContext.append("<h6>随机码："+randomCode+"  十进："+parseInt(randomCode,16)+"</h6>");
		analysisContext.append("<h6>流水方式："+GoWaterType+"  十进："+parseInt(GoWaterType,16)+"</h6>");
		analysisContext.append("<h6>停水方式："+StopWaterType+"  十进："+parseInt(StopWaterType,16)+"</h6>");
		analysisContext.append("<h6>消费模式："+ConsumeType+"  十进："+parseInt(ConsumeType,16)+"</h6>");
		analysisContext.append("<h6>第一费率扣费金额单位分 ："+Rate1Fare+"  十进："+parseInt(Rate1Fare,16)+"</h6>");
		analysisContext.append("<h6>第一扣费周期单位秒或者脉冲 ："+Rate1Water+"  十进："+parseInt(Rate1Water,16)+"</h6>");
		analysisContext.append("<h6>第五费率扣费金额单位分："+Rate5Fare+"  十进："+parseInt(Rate5Fare,16)+"</h6>");
		analysisContext.append("<h6>第五扣费周期单位秒或者脉冲："+Rate5Water+"  十进："+parseInt(Rate5Water,16)+"</h6>");
		analysisContext.append("<h6>流量模式扣费精度："+WaterPrecision+"  十进："+parseInt(WaterPrecision,16)+"</h6>");
		analysisContext.append("<h6>流量模式扣费速率："+WaterLimit+"  十进："+parseInt(WaterLimit,16)+"</h6>");
		analysisContext.append("<h6>第一费率卡类型："+Rate1CardTypes+"  十进："+parseInt(Rate1CardTypes,16)+"</h6>");
		analysisContext.append("<h6>日限额："+DayLimitFare+"  十进："+parseInt(DayLimitFare,16)+"</h6>");
		analysisContext.append("<h6>日限额卡类型："+DayLimitFareCardTypes+"  十进："+parseInt(DayLimitFareCardTypes,16)+"</h6>");
		analysisContext.append("<h6>次限额："+TimeLimitFare+"  十进："+parseInt(TimeLimitFare,16)+"</h6>");
		analysisContext.append("<h6>次限额卡类型："+TimeLimitFareCardTypes+"  十进："+parseInt(TimeLimitFareCardTypes,16)+"</h6>");
		analysisContext.append("<h6>卡底金卡类型："+CardMinFareCardTypes+"  十进："+parseInt(CardMinFareCardTypes,16)+"</h6>");
		analysisContext.append("<h6>1自动费率使能 0自动费率禁止："+EnableAutoCalcRate+"  十进："+parseInt(EnableAutoCalcRate,16)+"</h6>");
		analysisContext.append("<h6>卡底金："+CardMinFare+"  十进："+parseInt(CardMinFare,16)+"</h6>");
		analysisContext.append("<h6>是否开启："+Enable+"  十进："+parseInt(Enable,16)+"</h6>");
		analysisContext.append("<h6>校验："+crc+"  十进："+parseInt(crc,16)+"</h6>");
	}
</script>
</body>
</html>
